package znet

import (
	"fmt"
	"google.golang.org/protobuf/proto"
	"venus/conf"
	"venus/service/sv_tcp/znet/zpack"
	"venus/service/sv_tcp/znet/ztcp"
)

type Request struct {
	Conn *ztcp.TcpConnection //已经和客户端建立好的 链接
	Msg  *zpack.PackBuffer   //客户端请求的数据
}

// GetConnection 获取请求连接信息
func (r *Request) GetConnection() *ztcp.TcpConnection {
	return r.Conn
}

// GetData 获取请求消息的数据
func (r *Request) GetData() []byte {
	return r.Msg.Data
}

// GetMsgID 获取请求的消息的ID
func (r *Request) GetMsgID() uint32 {
	return r.Msg.Id
}

// GetMsgCode 获取请求的消息的Code
func (r *Request) GetMsgCode() uint16 {
	return r.Msg.Code
}

// GetPb 解析成pb消息
func (r *Request) GetPb(msg proto.Message) bool {
	if err := proto.Unmarshal(r.GetData(), msg); err != nil {
		fmt.Println(err)
		return false
	}
	return true
}

// Send 发送pb消息 带错误码
func (r *Request) Send(msg proto.Message, eCode conf.EProtocolResult) int {
	return r.GetConnection().Send(msg, eCode)
}

// SendSuccess 发送pb消息 胜利错误码
func (r *Request) SendSuccess(msg proto.Message) int {
	return r.GetConnection().SendSuccess(msg)
}
